#include <pthread.h>
#include <iostream>
#include <string>
#include <unistd.h>
#include <cstdio>
#include <sys/types.h>

__thread int cnt = 100;
void *routine(void *args)
{
    std::string name = static_cast<const char *>(args);
    int num = 5;
    while (num--)
    {
        cnt++;
        std::cout << name << "cnt: "<< cnt << std::endl;
    }
    return nullptr;
}

int main()
{
    pthread_t tid;
    pthread_create(&tid, nullptr, routine, (void *)"thread -1");

    while (true)
    {
        std::cout << "我是主线程 cnt:" << cnt << std::endl;
        sleep(1);
    }
    return 0;
}

// using namespace std;

// #define NUM 5

// void* threadRun(void *name)
// {
//     while(true)
//     {
//         cout << "我是次线程 " << (char*)name << endl;
//         sleep(1);
//     }

//     return nullptr;
// }

// int main()
// {
//     pthread_t pt[NUM];

//     for(int i = 0; i < NUM; i++)
//     {
//         // 注册新线程的信息
//         char name[64];
//         snprintf(name, sizeof(name), "thread-%d", i + 1);
//         pthread_create(pt + i, nullptr, threadRun, name);
//     }

//     while(true)
//     {
//         cout << "我是主线程，我正在运行" << endl;
//         sleep(1);
//     }

//     return 0;
// }

// void *routine(void *args)
// {
//     std::string name = static_cast<char *>(args);
//     pthread_detach(pthread_self());

//     while (true)
//     {
//         std::cout << "我是一个新线程：" << name << std::endl;
//         sleep(1);
//     }

//     return nullptr;
// }

// int main()
// {

//     for (int i = 0; i < 5; i++)
//     {
//         char buffer[64];
//         snprintf(buffer, sizeof(buffer), "thread -%d", i);
//         pthread_t tid;
//         pthread_create(&tid, nullptr, routine, buffer);
//     }
//     while(true)
//     {
//         pause();
//     }
// }

// void *routine(void *args)
// {
//     std::string name = (char *)(args);
//     int cnt = 2;
//     while (cnt--)
//     {
//         sleep(1);
//         std::cout << "我是一个新线程：" << name << std::endl;
//         printf("新线程的tid: 0x%lx , pid : %d\n", pthread_self() , getpid());
//     }

//     std::cout << "新线程退出" <<std::endl;
//     pthread_exit((void*)123);
// }
// int main()
// {
//     pthread_t tid;

//     pthread_create(&tid, nullptr, routine, (void *)"thread-1");
//     int cnt = 10;
//     while (cnt--)
//     {
//         std::cout << "我是main进程" << std::endl;
//         sleep(1);
//     }

//     pthread_detach(tid);

//     void *count = nullptr;
//     int ret = pthread_join(tid , &count);
//     std::cout << "pthread_join: " << (ret) <<std::endl;
//     return 0;
// }
